/**  
 * @Title: BaseController.java
 * @Description: TODO(描述)
 * @author liuyi
 * @date 2022-06-29 13:16:01 
 */  
package com.fsxgt.datagrid.flow.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import com.fsxgt.datagrid.core.utils.ReturnT;

import lombok.extern.slf4j.Slf4j;

/**  
 * @ClassName: BaseController
 * @Description: TODO(描述)
 * @author liuyi
 * @date 2022-06-29 13:16:01 
*/
@Slf4j
public class BaseController {

	@ExceptionHandler(Exception.class)
	@ResponseBody
	public ReturnT handleExeption(Exception ex, HttpServletResponse resp) {

		log.error("Controller",ex);
		//绕过防火墙
	    return new ReturnT("300", ex.getMessage().replaceAll("SQL","SQ1").replaceAll("sql","sq1"));
	}
	
	public final static String getIpAddress(HttpServletRequest request)  {
        // 获取请求主机IP地址,如果通过代理进来，则透过防火墙获取真实IP地址

        String ip = request.getHeader("X-Forwarded-For");
        

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
               
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
                
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
                
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
                
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
                
            }
        } else if (ip.length() > 15) {
            String[] ips = ip.split(",");
            for (int index = 0; index < ips.length; index++) {
                String strIp = (String) ips[index];
                if (!("unknown".equalsIgnoreCase(strIp))) {
                    ip = strIp;
                    break;
                }
            }
        }
        return ip;
    }

}
